﻿using System;
using System.Collections.Generic;
using Sustainalytics.Entities.ProductInvolvement;
using Sustainalytics.BusinessResearchProductStates.Entities.ResearchState;
using static Sustainalytics.Utils.AssessementList;

namespace Sustainalytics.DataLayer.PI
{
    /// <remarks>
    /// Implement only Create, Update and ReadByNames
    /// 
    /// 
    /// </remarks>
    public interface IProductInvolvementDataRepository 
	{
        IEnumerable<CompanyList> Read(ProductInvolvementDataListFilters filters, List<int> userUniverseIds, List<string> claimedIndicators, int? skip, int? take, string[] orderBy = null, bool orderByAsc = true);
        long ReadCount(ProductInvolvementDataListFilters filters, List<int> userUniverseIds, List<string> claimedIndicators);
        ProductInvolvementData ReadById(Guid id);

        ProductInvolvementData ReadById(List<int> userUniverseIds, List<string> claimedIndicators, Guid id, ResearchState state);

        ProductInvolvementData ReadByCompanyId(int id);

        IEnumerable<ProductInvolvementData> ReadAll();

        IEnumerable<ProductInvolvementData> Read(int? skip, int? take, string sort, bool sortascending);

        void Create(IEnumerable<ProductInvolvementData> companies);

		IEnumerable<ProductInvolvementData> ReadByIdNames(List<string> names);

        void Update(IEnumerable<ProductInvolvementData> companies);

        void Update(ProductInvolvementData company);

        void Delete(ProductInvolvementData company);
	    List<ProductInvolvementDataIndicator> GetPiIndicatorCompanyIdAndIndicatorSymbol(Guid companyId);

        IEnumerable<string> GetPiIndicators();

        IEnumerable<ProductInvolvementFramework> GetFrameworks();

        IEnumerable<object> GetIndustriesFromCorporateData();

        List<ProductInvolvementData> GetPiCompanyAssessmentByCompanyIds(List<Guid> companyIds);
	}
}

